package com.xy.iot.netty.handle;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.util.CharsetUtil;

/**
 * @author Administrator
 * @create 2024年6月16日20:12:15
 * @desc 换行分隔符解码器
 */
public final class DelimiterMessageDecoder extends DelimiterBasedFrameDecoder {
    public static final int MAX_FRAME_LENGTH = 1024;
    public static final byte[] DELIMITER_DATA = "$_$".getBytes(CharsetUtil.UTF_8);
    public static final ByteBuf delimiter = Unpooled.wrappedBuffer(DELIMITER_DATA); // STX 开始符

    /**
     * 初始化
     * @param maxFrameLength 表示一行最大的长度，如果超过这个长度依然没有检测自定义分隔符，将会抛出TooLongFrameException
     * @param stripDelimiter 解码后的消息是否去除掉分隔符
     * @param failFast 如果为true，则超出maxLength后立即抛出TooLongFrameException，不进行继续解码
     * @param delimiters 分隔符，ByteBuf类型
     * @param lengthFieldOffset 长度字段的偏移量，即长度字段相对于整个消息的偏移量  目前这个版本没有这个参数
     */
    public DelimiterMessageDecoder(int maxFrameLength, boolean stripDelimiter, boolean failFast, ByteBuf... delimiters) {
        super(maxFrameLength, stripDelimiter, failFast, delimiters);
    }

    public DelimiterMessageDecoder() {
        super(
                MAX_FRAME_LENGTH,
                true,
                true,
                delimiter// 默认适用所有系统的换行符，来做分隔符
        );
    }
}
